world_map
# to build the country input field
from __future__ import print_function
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widget
# to build dataframes
import pandas as pd
import numpy as np
death_df = pd.read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv")
confirmed_df = pd.read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv")
recovered_df = pd.read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv")
country_df = pd.read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/web-data/data/cases_country.csv")
death_df.columns = map(str.lower, death_df.columns)
confirmed_df.columns = map(str.lower, confirmed_df.columns)
recovered_df.columns = map(str.lower, recovered_df.columns)
country_df.columns = map(str.lower, country_df.columns)
death_df = death_df.rename(columns = {"province/state":"state","country/region":"country"})
confirmed_df = confirmed_df.rename(columns = {"province/state":"state","country/region":"country"})
recovered_df = recovered_df.rename(columns = {"province/state":"state","country/region":"country"})
country_df = country_df.rename(columns = {"country_region":"country"})
death_df=death_df[death_df["lat"].notna()]
confirmed_df=confirmed_df[confirmed_df["lat"].notna()]
recovered_df=recovered_df[recovered_df["lat"].notna()]
country_df=country_df[country_df["lat"].notna()]
death_df.head()
| state | country | lat | long | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | ... | 7/10/21 | 7/11/21 | 7/12/21 | 7/13/21 | 7/14/21 | 7/15/21 | 7/16/21 | 7/17/21 | 7/18/21 | 7/19/21 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | NaN | Afghanistan | 33.93911 | 67.709953 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 5561 | 5561 | 5791 | 5791 | 5923 | 5983 | 5983 | 5983 | 5983 | 6213 |
| 1 | NaN | Albania | 41.15330 | 20.168300 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 2456 | 2456 | 2456 | 2456 | 2456 | 2456 | 2456 | 2456 | 2456 | 2456 |
| 2 | NaN | Algeria | 28.03390 | 1.659600 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 3824 | 3836 | 3851 | 3867 | 3882 | 3895 | 3910 | 3922 | 3938 | 3956 |
| 3 | NaN | Andorra | 42.50630 | 1.521800 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 |
| 4 | NaN | Angola | -11.20270 | 17.873900 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 929 | 935 | 939 | 941 | 946 | 951 | 952 | 954 | 957 | 969 |
5 rows × 549 columns
confirmed_df.head()
| state | country | lat | long | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | ... | 7/10/21 | 7/11/21 | 7/12/21 | 7/13/21 | 7/14/21 | 7/15/21 | 7/16/21 | 7/17/21 | 7/18/21 | 7/19/21 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | NaN | Afghanistan | 33.93911 | 67.709953 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 131586 | 131586 | 134653 | 134653 | 136643 | 137853 | 137853 | 137853 | 137853 | 141489 |
| 1 | NaN | Albania | 41.15330 | 20.168300 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 132587 | 132592 | 132597 | 132608 | 132616 | 132629 | 132647 | 132665 | 132686 | 132697 |
| 2 | NaN | Algeria | 28.03390 | 1.659600 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 145296 | 146064 | 146942 | 147883 | 148797 | 149906 | 151103 | 152210 | 153309 | 154486 |
| 3 | NaN | Andorra | 42.50630 | 1.521800 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 14075 | 14075 | 14155 | 14167 | 14167 | 14239 | 14273 | 14273 | 14273 | 14359 |
| 4 | NaN | Angola | -11.20270 | 17.873900 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 39881 | 39958 | 40055 | 40138 | 40327 | 40530 | 40631 | 40707 | 40805 | 40906 |
5 rows × 549 columns
recovered_df.head()
| state | country | lat | long | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | ... | 7/10/21 | 7/11/21 | 7/12/21 | 7/13/21 | 7/14/21 | 7/15/21 | 7/16/21 | 7/17/21 | 7/18/21 | 7/19/21 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | NaN | Afghanistan | 33.93911 | 67.709953 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 80226 | 81077 | 82586 | 82586 | 82586 | 82586 | 82586 | 82586 | 82586 | 82586 |
| 1 | NaN | Albania | 41.15330 | 20.168300 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 130047 | 130050 | 130052 | 130053 | 130059 | 130061 | 130067 | 130072 | 130074 | 130081 |
| 2 | NaN | Algeria | 28.03390 | 1.659600 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 100911 | 101430 | 102010 | 102594 | 103192 | 103809 | 104397 | 104992 | 105604 | 106337 |
| 3 | NaN | Andorra | 42.50630 | 1.521800 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 13770 | 13770 | 13787 | 13796 | 13796 | 13829 | 13844 | 13844 | 13844 | 13897 |
| 4 | NaN | Angola | -11.20270 | 17.873900 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 34298 | 34327 | 34357 | 34500 | 34584 | 34620 | 34724 | 34732 | 34755 | 34790 |
5 rows × 549 columns
country_df.head()
| country | last_update | lat | long_ | confirmed | deaths | recovered | active | incident_rate | people_tested | people_hospitalized | mortality_rate | uid | iso3 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Afghanistan | 2021-07-20 09:21:04 | 33.93911 | 67.709953 | 141489.0 | 6213.0 | 82586.0 | 52690.0 | 363.460133 | NaN | NaN | 4.391154 | 4 | AFG |
| 1 | Albania | 2021-07-20 09:21:04 | 41.15330 | 20.168300 | 132697.0 | 2456.0 | 130081.0 | 160.0 | 4611.057057 | NaN | NaN | 1.850833 | 8 | ALB |
| 2 | Algeria | 2021-07-20 09:21:04 | 28.03390 | 1.659600 | 154486.0 | 3956.0 | 106337.0 | 44193.0 | 352.297208 | NaN | NaN | 2.560750 | 12 | DZA |
| 3 | Andorra | 2021-07-20 09:21:04 | 42.50630 | 1.521800 | 14359.0 | 127.0 | 13897.0 | 335.0 | 18584.093703 | NaN | NaN | 0.884463 | 20 | AND |
| 4 | Angola | 2021-07-20 09:21:04 | -11.20270 | 17.873900 | 40906.0 | 969.0 | 34790.0 | 5147.0 | 124.461956 | NaN | NaN | 2.368846 | 24 | AGO |
country_df for the highest to the lowest confirmed cases¶sorted_country_df = country_df.sort_values("confirmed", ascending = False)
sorted_country_df.head()
| country | last_update | lat | long_ | confirmed | deaths | recovered | active | incident_rate | people_tested | people_hospitalized | mortality_rate | uid | iso3 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 181 | US | 2021-07-20 09:21:04 | 40.000000 | -100.00000 | 34132079.0 | 609231.0 | NaN | NaN | 10359.809413 | NaN | NaN | 1.784922 | 840 | USA |
| 79 | India | 2021-07-20 09:21:04 | 20.593684 | 78.96288 | 31174322.0 | 414482.0 | 30353710.0 | 406130.0 | 2259.001663 | NaN | NaN | 1.329562 | 356 | IND |
| 23 | Brazil | 2021-07-20 09:21:04 | -14.235000 | -51.92530 | 19391845.0 | 542756.0 | 17356265.0 | 1492824.0 | 9123.023578 | NaN | NaN | 2.798888 | 76 | BRA |
| 62 | France | 2021-07-20 09:21:04 | 46.227600 | 2.21370 | 5934122.0 | 111682.0 | 408973.0 | 5413467.0 | 9091.163962 | NaN | NaN | 1.882031 | 250 | FRA |
| 144 | Russia | 2021-07-20 09:21:04 | 61.524000 | 105.31880 | 5931925.0 | 147457.0 | 5318062.0 | 466406.0 | 4064.787028 | NaN | NaN | 2.485820 | 643 | RUS |
def highlight_col(x):
r = "background-color: #FF9AA2"
p = "background-color: #E0BBE4"
g = "background-color: #CCCCCC"
temp_df = pd.DataFrame("", index = x.index, columns = x.columns)
temp_df.iloc[:,4] = p
temp_df.iloc[:,5] = r
temp_df.iloc[:,6] = g
return temp_df
sorted_country_df.head().style.apply(highlight_col, axis = None)
| country | last_update | lat | long_ | confirmed | deaths | recovered | active | incident_rate | people_tested | people_hospitalized | mortality_rate | uid | iso3 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 181 | US | 2021-07-20 09:21:04 | 40.000000 | -100.000000 | 34132079.000000 | 609231.000000 | nan | nan | 10359.809413 | nan | nan | 1.784922 | 840 | USA |
| 79 | India | 2021-07-20 09:21:04 | 20.593684 | 78.962880 | 31174322.000000 | 414482.000000 | 30353710.000000 | 406130.000000 | 2259.001663 | nan | nan | 1.329562 | 356 | IND |
| 23 | Brazil | 2021-07-20 09:21:04 | -14.235000 | -51.925300 | 19391845.000000 | 542756.000000 | 17356265.000000 | 1492824.000000 | 9123.023578 | nan | nan | 2.798888 | 76 | BRA |
| 62 | France | 2021-07-20 09:21:04 | 46.227600 | 2.213700 | 5934122.000000 | 111682.000000 | 408973.000000 | 5413467.000000 | 9091.163962 | nan | nan | 1.882031 | 250 | FRA |
| 144 | Russia | 2021-07-20 09:21:04 | 61.524000 | 105.318800 | 5931925.000000 | 147457.000000 | 5318062.000000 | 466406.000000 | 4064.787028 | nan | nan | 2.485820 | 643 | RUS |
import plotly.express as px
fig = px.scatter(sorted_country_df.head(10),
x = "country",
y="confirmed",
size="confirmed",
color="country",
hover_name="country",
size_max=60)
fig.show()
import plotly.graph_objects as go
def plot_cases_for_country(country):
labels = ["confirmed","deaths"]
colors = ["#E0BBE4","#FF9AA2"]
mode_size = [6,8]
line_size = [4,5]
df_list = [confirmed_df, death_df]
fig = go.Figure()
for i, df in enumerate(df_list):
if country == "World" or country == "world":
x_data = np.array(list(df.iloc[:, 5:].columns))
y_data = np.sum(np.asarray(df.iloc[:, 5:]), axis=0)
else:
x_data = np.array(list(df.iloc[:, 5:].columns))
y_data = np.sum(np.asarray(df[df["country"]==country].iloc[:,5:]), axis=0)
fig.add_trace(go.Scatter(x=x_data, y=y_data, mode="lines+markers",
name=labels[i],
line=dict(color=colors[i], width=line_size[i]),
connectgaps=True,
text = "Total" + str(labels[i]) + ": " + str(y_data[-1])
))
fig.show()
interact(plot_cases_for_country, country="World")
<function __main__.plot_cases_for_country(country)>
import folium
world_map = folium.Map(location=[11,0], tiles="cartodbpositron", zoom_start=2, max_zoom=6, min_zoom=2)
for i in range(len(confirmed_df)):
folium.Circle(
location=[confirmed_df.iloc[i]["lat"], confirmed_df.iloc[i]["long"]],
fill=True,
radius = (int((np.log(confirmed_df.iloc[i,-1] + 1.00001))) + 0.2)*50000,
fill_color="blue",
color="red",
tooltip = "<div style='margin: 0; background-color: black; color: white;''>"+
"<h4 style='text-align:center;font-weight: bold'>"+confirmed_df.iloc[i]["country"] + "</h4>"
"<hr style='margin:10px;color: white;''>"+
"<ul style='color: white;;list-style-type:circle;align-item:left;padding-left:20px;padding-right:20px'>"+
"<li>Confirmed: "+str(confirmed_df.iloc[i,-1])+"</li>"+
"<li>Deaths: "+str(death_df.iloc[i,-1])+"</li>"+
"<li>Death Rate: "+ str(np.round(death_df.iloc[i,-1]/(confirmed_df.iloc[i,-1]+1.00001)*100,2))+ "</li>"+
"</ul></div>"
).add_to(world_map)
world_map